package org.example.autofilearchiver.Web.ServiceImpl;

import org.example.autofilearchiver.tool.DOCX.DocxTool;
import org.example.autofilearchiver.tool.PDF.PDFTool;
import org.example.autofilearchiver.tool.StaticClass.DOCX.DocxStatic;
import org.example.autofilearchiver.tool.StaticClass.FILE.FileStatic;
import org.example.autofilearchiver.tool.StaticClass.PDf.PDFStatic;
import org.example.autofilearchiver.tool.fileTool.FileUtils;
import org.example.autofilearchiver.toolclass.DOCX.DocxFile;
import org.example.autofilearchiver.toolclass.DOCX.DocxFileTemplate;
import org.example.autofilearchiver.toolclass.ELSE.FindDataWithStringAndNumberObject;
import org.example.autofilearchiver.toolclass.PDF.PDFFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class DocxAndPdfProcessServiceImpl {


    /**
     * 处理前期所有数据，目前只有各种文件路径，这是功能1，需传入docx文件路径和pdf文件路径
     *
     * @throws Exception 异常
     */
    public static void processData() throws Exception {
        //根据路径，创建docx对象，pdf对象
        DocxProcessServiceImpl.initDocxFiles();
        //创建pdf对象
        PdfProcessServiceImpl.initPdfFiles();
        //pdf对象与docx对象建立连接
        docxAndPdfBuildConnection();
        //现在每个pdf对象还是多页的，将其分成单页的，创建对应的单页pdf对象，存到docx对象里(归档路径暂时置为空,模板也置为空,有用的tags数据也置为空)
        PdfProcessServiceImpl.pdfSplit();
        //加入docx对象的模板集合
        DocxProcessServiceImpl.joinAllDocxTemplates();
        //根据docx对象的模板集合，匹配tag数据，将有用的tag数据存到pdf对象里面
        PdfProcessServiceImpl.getTemplateData();
        //进行共有字的提取
        PdfProcessServiceImpl.findCommonSubstringCanUse();
        //目前暂时定2个功能，1得到pdf的重命名名字和归档路径，2归档
        //1得到pdf的重命名名字和归档路径
        PdfProcessServiceImpl.getRenamedPdfNamesAndArchivePaths();
        //最终归档
        PdfProcessServiceImpl.archiverPdf();

    }
    /**
     * 这是功能2，需传入pdf文件路径，pdf需经过ocr识别
     *
     * @throws Exception 异常
     */
    public static void processData2() throws Exception {
        //根据路径创建pdf对象
        PdfProcessServiceImpl.initPdfFiles();
        //对pdf进行分页，创建对应的单页pdf对象
        PdfProcessServiceImpl.pdfSplit2();
        //进行模板对象的匹配，根据tag存有用的数据
        PdfProcessServiceImpl.getTemplateData2();
        //进行共有字的提取
        PdfProcessServiceImpl.findCommonSubstringCanUse2();
        //目前暂时定2个功能，1得到pdf的重命名名字和归档路径，2归档
        //1得到pdf的重命名名字和归档路径
        PdfProcessServiceImpl.getRenamedPdfNamesAndArchivePaths2();
        //处理没有模板的pdf单页对象，将其合并
        PdfProcessServiceImpl.processPdfObjectWithoutTemplate();
        //最终归档
        PdfProcessServiceImpl.archiverPdf2();
    }

    /**
     * 获取到全局的pdf和docx对象，建立联系
     *
     * @throws Exception pdf与docx未一一对应
     */
    public static void docxAndPdfBuildConnection() throws Exception {
        //获取到全局的pdf和docx对象，建立联系
        //建立全局pdf与docx的关系
        for (DocxFile docxFile : DocxStatic.docxObjects) {
            String docxName = FileUtils.getFileNameWithoutExtension(docxFile.getDocxPath());
            for (PDFFile pdfFile : PDFStatic.pdfObjects) {
                String pdfName = FileUtils.getFileNameWithoutExtension(pdfFile.getPdfPath());
                if (pdfName.equals(docxName)) {
                    docxFile.setPdfFile(pdfFile);
                    pdfFile.setDocxFile(docxFile);
                }
            }
        }
        //检查是否每个docx对象和pdf对象是否都有对应
        for (PDFFile pdfFile : PDFStatic.pdfObjects) {
            if (pdfFile.getDocxFile() == null) {
                throw new Exception("pdf与docx未一一对应");
            }
        }
        for (DocxFile docxFile : DocxStatic.docxObjects) {
            if (docxFile.getPdfFile() == null) {
                throw new Exception("pdf与docx未一一对应");
            }
        }
    }
}
